﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TechControl.BD;
using System.Data.SqlClient;

namespace TechControl.Presentation
{
    public partial class frm_listItensAtribuidos : frm_default
    {
        BindingSource bs = new BindingSource();

        public frm_listItensAtribuidos()
        {
            InitializeComponent();
        }

        //saí do form e volta para o anterior.
        private void bt_sair_Click(object sender, EventArgs e)
        {
            this.closeForm();
        }

        //habilita campo para inserção ou leitura de um imei.
        private void rdb_imei_Click(object sender, EventArgs e)
        {
            clearText();
            txt_serial.Enabled = false;
            txt_nomeFunc.Enabled = false;
            mtxt_data.Enabled = false;
            txt_imei.Enabled = true;
            txt_imei.Focus();
        }

        //habilita campo para inserção ou leitura de serial.
        private void rdb_serial_Click(object sender, EventArgs e)
        {
            clearText();
            txt_serial.Enabled = true;
            txt_serial.Focus();
            txt_nomeFunc.Enabled = false;
            mtxt_data.Enabled = false;
            txt_imei.Enabled = false;
        }

        //habilita campo para a inserção do nome do Funcionário.
        private void rdb_funcionario_Click(object sender, EventArgs e)
        {
            clearText();
            txt_serial.Enabled = false;
            txt_nomeFunc.Enabled = true;
            mtxt_data.Enabled = false;
            txt_nomeFunc.Focus();
            txt_imei.Enabled = false;
        }

        //desativa textboxes.
        private void rbd_todos_Click(object sender, EventArgs e)
        {
            clearText();
            txt_serial.Enabled = false;
            txt_nomeFunc.Enabled = false;
            txt_imei.Enabled = false;
        }

        private void frm_listItensAtribuidos_Load(object sender, EventArgs e)
        {
            rbd_todos.Checked = true;
            loadDadosOnGrid();
        }

        //método responsável por popular o dataGrid.
        public void loadDadosOnGrid()
        {
            BaseDB ba = new BaseDB();
            try
            {
                ba.open();

                SqlCommand command = new SqlCommand("Select * from tb_item_atribuido", ba.conn);
                //cria um adapter para preencher um data set.
                SqlDataAdapter da = new SqlDataAdapter(command);
                //define um objeto dataSet
                DataSet ds = new DataSet();
                da.Fill(ds);

                //atribui o dataset ao DataSource do BindingSource
                bs.DataSource = ds;

                //atribui o BindingSource ao BindingNavigator
                bs.DataMember = ds.Tables[0].TableName;

                //Atribui o BindingSource ao DataGridView
                dg_itensAtribuido.DataSource = bs;
            }
            catch (Exception)
            {
                MessageBox.Show("Não foi possivél carregar os dados!", "Erro");
            }
            finally
            {
                ba.close();
            }
        }

        //chama método que efetua o filtro.
        private void bt_filtrar_Click(object sender, EventArgs e)
        {
            activeFilter();
        }

        //método responsável por filtrar os valores de acordo com o valor selecionado.
        private void activeFilter()
        {
            if (rdb_imei.Checked == true)
            {
                if (txt_imei.Text == "")
                {
                    MessageBox.Show("Insira um IMEI para continuar!", "Filtro por IMEI");
                }
                else
                {
                    string imei = txt_imei.Text;
                    bs.Filter = "imei like '%"+imei+"%'";
                }
            }

            else if (rdb_serial.Checked == true)
            {
                if (txt_serial.Text == "")
                {
                    MessageBox.Show("Insira um Serial para continuar!", "Filtro por Serial");
                }
                else
                {
                    string serial = txt_serial.Text;
                    bs.Filter = "serial like '%" + serial + "%'";
                }
            }

            else if (rdb_funcionario.Checked == true)
            {
                if (txt_nomeFunc.Text == "")
                {
                    MessageBox.Show("Insira um nome de funcionário para continuar!", "Filtro por Nome de Funcionário");
                }
                else
                {
                    string nome = txt_nomeFunc.Text;
                    bs.Filter = "nome like '%" + nome + "%'";
                }
            }

            else if (rdb_date.Checked == true)
            {
                if (mtxt_data.Text == "")
                {
                    MessageBox.Show("Insira uma data para continuar!", "Filtro por Data");
                }
                else
                {
                    string data = mtxt_data.Text;
                    bs.Filter = "DATA_ATRIBUICAO like '%" + data + "%'";
                }
            }

            else if (rbd_todos.Checked == true)
            {
                bs.RemoveFilter();
            }
        }

        //limpa os campos text.
        private void clearText()
        {
            txt_imei.Text = "";
            txt_serial.Text = "";
            txt_nomeFunc.Text = "";
            mtxt_data.Text = "";
        }

        //chama método que gera o termo de responsabilidade.
        private void bt_imprimirTermo_Click(object sender, EventArgs e)
        {
            Int64 cod = Int64.Parse(dg_itensAtribuido.CurrentRow.Cells[0].Value.ToString());

            preencherTermo(cod);

        }

        //busca os valores do item selecionado e preenche o termo.
        private void preencherTermo(Int64 cod)
        {
            Item_Atribuido result = (Item_Atribuido)Item_AtrinuidoDB.getInstance().selectByCod(cod)[0];

            string matriz = Application.StartupPath+ "\\RESPONSABILIDADE.doc";


            string nome = result.nome;
            string rg = result.rg;
            string date = DateTime.Now.ToString("dd/MM/yyyy");
            string equip = result.descModelo;
            string marca = result.marca;
            string modelo = result.modelo;
            string pat = result.pat;
            string empresa = result.empresa;
            string serial = result.serial;
            string imei = result.imei;
            string dia = DateTime.Now.ToString("dd");
            string ano = DateTime.Now.ToString("yyyy");

            try
            {
                GeraTermos.getInstance().preencherResponsabilidade(matriz, nome, rg, date, equip, marca, modelo, pat, empresa, serial, imei, dia, ano);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }

        //chama método que efetua a devolução do item e modifica seu status no banco.
        private void bt_removerAt_Click(object sender, EventArgs e)
        {
            var resultado = MessageBox.Show("Deseja realmente devolver o equipamento?", "Devolução de aquipamento", MessageBoxButtons.YesNo, 
                MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
            if (resultado == DialogResult.Yes)
            {
                //chama método que remove o item da tabela de atribuídos e passa para a tabela de entregues.
                devolverItem();
            }
            else
            {
            }
        }

        //método que efetua a devolução do item.
        private void devolverItem()
        {
            if (dg_itensAtribuido.CurrentRow.Cells[0].Value == null)
            {
                MessageBox.Show("Selecione um item para remover!", "Entrega de Equipamento");
            }
            else
            {
                Int64 codItem = Int64.Parse(dg_itensAtribuido.CurrentRow.Cells[0].Value.ToString());
                Int64 codFunc = Int64.Parse(dg_itensAtribuido.CurrentRow.Cells[1].Value.ToString());
                string nome = (dg_itensAtribuido.CurrentRow.Cells[2].Value.ToString());
                Int64 codEquip = Int64.Parse(dg_itensAtribuido.CurrentRow.Cells[3].Value.ToString());
                string serial = (dg_itensAtribuido.CurrentRow.Cells[4].Value.ToString());
                string imei = (dg_itensAtribuido.CurrentRow.Cells[5].Value.ToString());
                string marca = (dg_itensAtribuido.CurrentRow.Cells[6].Value.ToString());
                string modelo = (dg_itensAtribuido.CurrentRow.Cells[7].Value.ToString());
                string descEquip = (dg_itensAtribuido.CurrentRow.Cells[8].Value.ToString());
                string rg = (dg_itensAtribuido.CurrentRow.Cells[10].Value.ToString());
                string pat = (dg_itensAtribuido.CurrentRow.Cells[11].Value.ToString());
                string empresa = (dg_itensAtribuido.CurrentRow.Cells[12].Value.ToString());
                string data = DateTime.Now.ToString("dd/MM/yyyy");
                string dia = DateTime.Now.ToString("dd");
                string ano = DateTime.Now.ToString("yyyy");

                if (Item_AtrinuidoDB.getInstance().removeItem(codItem))
                {
                    Int64 codEntregue = Item_EntregueDB.getInstance().getLastID();
                    codEntregue++;
                    if (Item_EntregueDB.getInstance().insertNewItem(codEntregue, codFunc, nome, codEquip, serial, imei, marca, modelo, descEquip, data, rg, pat, empresa))
                    {
                        var resposta = MessageBox.Show("Item Removido com Sucesso!, Deseja imprimir Termo de Devolução?", "Entrega de equipamento", MessageBoxButtons.YesNo,
                                                        MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                        if (resposta == DialogResult.Yes)
                        {
                            string matrix = Application.StartupPath + "\\DEVOLUCAO.doc";
                            GeraTermos.getInstance().preencherDevolucao(matrix, nome, rg, data, descEquip, marca, modelo, pat, empresa, serial, imei, dia, ano);
                            rbd_todos.Checked = true;
                            loadDadosOnGrid();
                        }
                        else
                        {
                            rbd_todos.Checked = true;
                            loadDadosOnGrid();
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Erro ao remover o item, contate o suporte!", "Entrega de equipamento");
                }
            }
        }

        //habilita o txt data para filtro.
        private void rdb_date_Click(object sender, EventArgs e)
        {
            clearText();
            txt_serial.Enabled = false;
            txt_nomeFunc.Enabled = false;
            mtxt_data.Enabled = true;
            mtxt_data.Focus();
            txt_imei.Enabled = false;
        }

        //ativado na leitura pelo leitor ou pelo evento enter.
        private void txt_imei_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(System.Windows.Forms.Keys.Enter))
            {
                if (txt_imei.Text == "")
                {
                    MessageBox.Show("Insira um IMEI para continuar", "Busca por IMEI");
                    txt_imei.Focus();
                }
                else
                {
                    activeFilter();
                }
            }
        }

        //ativado na leitura pelo leitor ou pelo evento enter.
        private void txt_serial_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(System.Windows.Forms.Keys.Enter))
            {
                if (txt_serial.Text == "")
                {
                    MessageBox.Show("Insira um Serial para continuar", "Busca por Serial");
                    txt_serial.Focus();
                }
                else
                {
                    activeFilter();
                }
            }
        }

        //ativado na leitura pelo leitor ou pelo evento enter.
        private void txt_nomeFunc_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(System.Windows.Forms.Keys.Enter))
            {
                if (txt_nomeFunc.Text == "")
                {
                    MessageBox.Show("Insira um nome para continuar", "Busca por Nome");
                    txt_nomeFunc.Focus();
                }
                else
                {
                    activeFilter();
                }
            }
        }

        //ativado na leitura pelo leitor ou pelo evento enter.
        private void mtxt_data_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(System.Windows.Forms.Keys.Enter))
            {
                if (mtxt_data.Text == "")
                {
                    MessageBox.Show("Insira uma data para continuar", "Busca por Data");
                    mtxt_data.Focus();
                }
                else
                {
                    activeFilter();
                }
            }
        }
    }
}
